
import router from "@/router";
import { tree } from "@/utils/tree";

let modules = import.meta.glob("@/views/**/*.vue");  // 获取views中的所有组件(视图组件)配置对象 (对应文件路径存储到对象中)
console.log("modules",modules);

export default {
    state(){
        return {
            authMenu:null,
        }
    },
    getters:{

    },
    mutations:{
        getAuthMenu(state,payload){
            state.authMenu = payload;
        }
    },
    actions:{
        async getAuthMenu(context){
            let {state,getters,rootState,rootGetters,commit} = context;
            // 解析rootState中的 authority.checkedkeys => 将其变为树状结构
            let list = tree(rootState.authority.checkedkeys);
            commit("getAuthMenu",list);
        },

        // 添加动态路由
        async addDynamicRoute(context){

            let {state,getters,rootState,rootGetters,commit} = context;
            let checkedkeys = rootState.authority.checkedkeys;

            // 解析rootState中的 authority.checkedkeys => component选项中, 是组件文件所在的路径, 需要将其解析为组件的配置对象
            // console.log("执行了",checkedkeys);

            checkedkeys.forEach(route=>{
                if(route.component){  // 并不是每一个配置项都有component ()
                    // vue2   路由懒加载 (当给的路径被访问时, 才会调用函数, 载入对应的模版文件)  
                    // console.log(route.path,`@/views${route.component}.vue`);
                    // let compPath = route.component;
                    // route.component = ()=> import(`@/views${compPath}.vue`); 

                    // vue3 写法  import.meta.glob("@/views/**/*.vue")
                    // console.log(route.path,`/src/views${route.component}.vue`);
                    route.component = modules[`/src/views${route.component}.vue`];
                }
            })
            
            
            // 解析rootState中的 authority.checkedkeys => 将其变为树状结构
            let list = tree(checkedkeys);
            // console.log("将一维数组解析为树状结构",list);


            // 先添加动态路由 (一步到位)
            // router.addRoute({
            //     path: '/',
            //     name: 'home',
            //     redirect: "/home",
            //     meta: {
            //       requireAuth: true, // 当前页面是否需要登录
            //       role: ["super", "admin", "user"], // 哪些用户可以访问当前页面 
            //     },
            //     component: ()=> import("@/views/Home/index.vue"),
            //     children:list,
            // })

             // 先添加动态路由 (一个一个追加)
            list.forEach(route=>{
                router.addRoute("home",route);
            })



            // 在匹配所有路由 => 跳404   !!!! 最后放
            router.addRoute({
                path: "/:pathMatch(.*)*",
                redirect: "/404",
            })


            // console.log("查看所有路由信息",router.getRoutes());

        }
    }
}